Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add workflow_job webhook #33694

Open
wants to merge 12 commits into
base: main
Choose a base branch
from

Conversation

ChristopherHX
Copy link
Contributor

Provide external Integration information about the Queue lossly based on https://docs.github.com/en/webhooks/webhook-events-and-payloads?actionType=completed#workflow_job

Naming conflicts between GitHub & Gitea are here, Blocked => Waiting, Waiting => Queued

Rationale Enhancement for ephemeral runners management #33570

fixup

initial working draft

Add more fields

More Complete
@GiteaBot GiteaBot added the lgtm/need 2 This PR needs two approvals by maintainers to be considered for merging. label Feb 23, 2025
@pull-request-size pull-request-size bot added the size/L Denotes a PR that changes 100-499 lines, ignoring generated files. label Feb 23, 2025
@github-actions github-actions bot added modifies/translation modifies/api This PR adds API routes or modifies them modifies/go Pull requests that update Go code modifies/templates This PR modifies the template files labels Feb 23, 2025
@ChristopherHX
Copy link
Contributor Author

ChristopherHX commented Feb 23, 2025

BTW, I might need help write tests these for webhooks. This can get complex for me.

Example Webhooks (two jobs, one depends on the other)
{
  "action": "queued",
  "workflow_job": {
    "id": 344,
    "run_id": 825,
    "run_url": "http://localhost:3000/test/private-repo/actions/runs/10",
    "name": "download",
    "labels": [
      "ephemeral"
    ],
    "run_attempt": 2,
    "head_sha": "a33e70fae58cce6ddf3a3e4c33e7be4fe5ea1533",
    "head_branch": "ephemeral",
    "runner_id": 0,
    "runner_name": "",
    "steps": null,
    "created_at": "2025-02-23T14:51:50Z",
    "started_at": "1970-01-01T00:00:00Z",
    "completed_at": "1970-01-01T00:00:00Z"
  },
  "repository": {
    "id": 65,
    "owner": {
      "id": 43,
      "login": "test",
      "login_name": "",
      "source_id": 0,
      "full_name": "",
      "email": "test@test.com",
      "avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
      "html_url": "http://localhost:3000/test",
      "language": "",
      "is_admin": false,
      "last_login": "0001-01-01T00:00:00Z",
      "created": "2025-02-10T13:25:00+01:00",
      "restricted": false,
      "active": false,
      "prohibit_login": false,
      "location": "",
      "website": "",
      "description": "",
      "visibility": "public",
      "followers_count": 0,
      "following_count": 0,
      "starred_repos_count": 0,
      "username": "test"
    },
    "name": "private-repo",
    "full_name": "test/private-repo",
    "description": "",
    "empty": false,
    "private": true,
    "fork": false,
    "template": false,
    "parent": null,
    "mirror": false,
    "size": 33,
    "language": "",
    "languages_url": "http://localhost:3000/api/v1/repos/test/private-repo/languages",
    "html_url": "http://localhost:3000/test/private-repo",
    "url": "http://localhost:3000/api/v1/repos/test/private-repo",
    "link": "",
    "ssh_url": "christopher@localhost:test/private-repo.git",
    "clone_url": "http://localhost:3000/test/private-repo.git",
    "original_url": "",
    "website": "",
    "stars_count": 0,
    "forks_count": 0,
    "watchers_count": 1,
    "open_issues_count": 0,
    "open_pr_counter": 0,
    "release_counter": 0,
    "default_branch": "main",
    "archived": false,
    "created_at": "2025-02-10T20:40:44+01:00",
    "updated_at": "2025-02-23T19:37:50+01:00",
    "archived_at": "1970-01-01T01:00:00+01:00",
    "permissions": {
      "admin": true,
      "push": true,
      "pull": true
    },
    "has_issues": true,
    "internal_tracker": {
      "enable_time_tracker": true,
      "allow_only_contributors_to_track_time": true,
      "enable_issue_dependencies": true
    },
    "has_wiki": true,
    "has_pull_requests": true,
    "has_projects": true,
    "projects_mode": "all",
    "has_releases": true,
    "has_packages": true,
    "has_actions": true,
    "ignore_whitespace_conflicts": false,
    "allow_merge_commits": true,
    "allow_rebase": true,
    "allow_rebase_explicit": true,
    "allow_squash_merge": true,
    "allow_fast_forward_only_merge": true,
    "allow_rebase_update": true,
    "default_delete_branch_after_merge": false,
    "default_merge_style": "merge",
    "default_allow_maintainer_edit": false,
    "avatar_url": "",
    "internal": false,
    "mirror_interval": "",
    "object_format_name": "sha1",
    "mirror_updated": "0001-01-01T00:00:00Z",
    "repo_transfer": null,
    "topics": [],
    "licenses": null
  },
  "sender": {
    "id": 43,
    "login": "test",
    "login_name": "",
    "source_id": 0,
    "full_name": "",
    "email": "test@noreply.localhost",
    "avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
    "html_url": "http://localhost:3000/test",
    "language": "",
    "is_admin": false,
    "last_login": "0001-01-01T00:00:00Z",
    "created": "2025-02-10T13:25:00+01:00",
    "restricted": false,
    "active": false,
    "prohibit_login": false,
    "location": "",
    "website": "",
    "description": "",
    "visibility": "public",
    "followers_count": 0,
    "following_count": 0,
    "starred_repos_count": 0,
    "username": "test"
  }
}
{
  "action": "completed",
  "workflow_job": {
    "id": 343,
    "run_id": 825,
    "run_url": "http://localhost:3000/test/private-repo/actions/runs/10",
    "name": "_",
    "labels": [
      "ephemeral"
    ],
    "run_attempt": 3,
    "head_sha": "a33e70fae58cce6ddf3a3e4c33e7be4fe5ea1533",
    "head_branch": "ephemeral",
    "conclusion": "success",
    "runner_id": 194,
    "runner_name": "",
    "steps": [
      {
        "name": "christopherhx/gitea-upload-artifact@v4",
        "number": 0,
        "conclusion": "success",
        "started_at": "2025-02-23T18:37:48Z",
        "completed_at": "2025-02-23T18:37:49Z"
      }
    ],
    "created_at": "2025-02-23T14:51:50Z",
    "started_at": "2025-02-23T18:37:48Z",
    "completed_at": "2025-02-23T18:37:49Z"
  },
  "repository": {
    "id": 65,
    "owner": {
      "id": 43,
      "login": "test",
      "login_name": "",
      "source_id": 0,
      "full_name": "",
      "email": "test@test.com",
      "avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
      "html_url": "http://localhost:3000/test",
      "language": "",
      "is_admin": false,
      "last_login": "0001-01-01T00:00:00Z",
      "created": "2025-02-10T13:25:00+01:00",
      "restricted": false,
      "active": false,
      "prohibit_login": false,
      "location": "",
      "website": "",
      "description": "",
      "visibility": "public",
      "followers_count": 0,
      "following_count": 0,
      "starred_repos_count": 0,
      "username": "test"
    },
    "name": "private-repo",
    "full_name": "test/private-repo",
    "description": "",
    "empty": false,
    "private": true,
    "fork": false,
    "template": false,
    "parent": null,
    "mirror": false,
    "size": 33,
    "language": "",
    "languages_url": "http://localhost:3000/api/v1/repos/test/private-repo/languages",
    "html_url": "http://localhost:3000/test/private-repo",
    "url": "http://localhost:3000/api/v1/repos/test/private-repo",
    "link": "",
    "ssh_url": "christopher@localhost:test/private-repo.git",
    "clone_url": "http://localhost:3000/test/private-repo.git",
    "original_url": "",
    "website": "",
    "stars_count": 0,
    "forks_count": 0,
    "watchers_count": 1,
    "open_issues_count": 0,
    "open_pr_counter": 0,
    "release_counter": 0,
    "default_branch": "main",
    "archived": false,
    "created_at": "2025-02-10T20:40:44+01:00",
    "updated_at": "2025-02-23T19:37:49+01:00",
    "archived_at": "1970-01-01T01:00:00+01:00",
    "permissions": {
      "admin": true,
      "push": true,
      "pull": true
    },
    "has_issues": true,
    "internal_tracker": {
      "enable_time_tracker": true,
      "allow_only_contributors_to_track_time": true,
      "enable_issue_dependencies": true
    },
    "has_wiki": true,
    "has_pull_requests": true,
    "has_projects": true,
    "projects_mode": "all",
    "has_releases": true,
    "has_packages": true,
    "has_actions": true,
    "ignore_whitespace_conflicts": false,
    "allow_merge_commits": true,
    "allow_rebase": true,
    "allow_rebase_explicit": true,
    "allow_squash_merge": true,
    "allow_fast_forward_only_merge": true,
    "allow_rebase_update": true,
    "default_delete_branch_after_merge": false,
    "default_merge_style": "merge",
    "default_allow_maintainer_edit": false,
    "avatar_url": "",
    "internal": false,
    "mirror_interval": "",
    "object_format_name": "sha1",
    "mirror_updated": "0001-01-01T00:00:00Z",
    "repo_transfer": null,
    "topics": [],
    "licenses": null
  },
  "sender": {
    "id": 43,
    "login": "test",
    "login_name": "",
    "source_id": 0,
    "full_name": "",
    "email": "test@noreply.localhost",
    "avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
    "html_url": "http://localhost:3000/test",
    "language": "",
    "is_admin": false,
    "last_login": "0001-01-01T00:00:00Z",
    "created": "2025-02-10T13:25:00+01:00",
    "restricted": false,
    "active": false,
    "prohibit_login": false,
    "location": "",
    "website": "",
    "description": "",
    "visibility": "public",
    "followers_count": 0,
    "following_count": 0,
    "starred_repos_count": 0,
    "username": "test"
  }
}
{
  "action": "in_progress",
  "workflow_job": {
    "id": 343,
    "run_id": 825,
    "run_url": "http://localhost:3000/test/private-repo/actions/runs/10",
    "name": "_",
    "labels": [
      "ephemeral"
    ],
    "run_attempt": 3,
    "head_sha": "a33e70fae58cce6ddf3a3e4c33e7be4fe5ea1533",
    "head_branch": "ephemeral",
    "runner_id": 194,
    "runner_name": "",
    "steps": [
      {
        "name": "christopherhx/gitea-upload-artifact@v4",
        "number": 0,
        "started_at": "1970-01-01T00:00:00Z",
        "completed_at": "1970-01-01T00:00:00Z"
      }
    ],
    "created_at": "2025-02-23T14:51:50Z",
    "started_at": "2025-02-23T18:37:48Z",
    "completed_at": "1970-01-01T00:00:00Z"
  },
  "repository": {
    "id": 65,
    "owner": {
      "id": 43,
      "login": "test",
      "login_name": "",
      "source_id": 0,
      "full_name": "",
      "email": "test@test.com",
      "avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
      "html_url": "http://localhost:3000/test",
      "language": "",
      "is_admin": false,
      "last_login": "0001-01-01T00:00:00Z",
      "created": "2025-02-10T13:25:00+01:00",
      "restricted": false,
      "active": false,
      "prohibit_login": false,
      "location": "",
      "website": "",
      "description": "",
      "visibility": "public",
      "followers_count": 0,
      "following_count": 0,
      "starred_repos_count": 0,
      "username": "test"
    },
    "name": "private-repo",
    "full_name": "test/private-repo",
    "description": "",
    "empty": false,
    "private": true,
    "fork": false,
    "template": false,
    "parent": null,
    "mirror": false,
    "size": 33,
    "language": "",
    "languages_url": "http://localhost:3000/api/v1/repos/test/private-repo/languages",
    "html_url": "http://localhost:3000/test/private-repo",
    "url": "http://localhost:3000/api/v1/repos/test/private-repo",
    "link": "",
    "ssh_url": "christopher@localhost:test/private-repo.git",
    "clone_url": "http://localhost:3000/test/private-repo.git",
    "original_url": "",
    "website": "",
    "stars_count": 0,
    "forks_count": 0,
    "watchers_count": 1,
    "open_issues_count": 0,
    "open_pr_counter": 0,
    "release_counter": 0,
    "default_branch": "main",
    "archived": false,
    "created_at": "2025-02-10T20:40:44+01:00",
    "updated_at": "2025-02-23T19:37:46+01:00",
    "archived_at": "1970-01-01T01:00:00+01:00",
    "permissions": {
      "admin": true,
      "push": true,
      "pull": true
    },
    "has_issues": true,
    "internal_tracker": {
      "enable_time_tracker": true,
      "allow_only_contributors_to_track_time": true,
      "enable_issue_dependencies": true
    },
    "has_wiki": true,
    "has_pull_requests": true,
    "has_projects": true,
    "projects_mode": "all",
    "has_releases": true,
    "has_packages": true,
    "has_actions": true,
    "ignore_whitespace_conflicts": false,
    "allow_merge_commits": true,
    "allow_rebase": true,
    "allow_rebase_explicit": true,
    "allow_squash_merge": true,
    "allow_fast_forward_only_merge": true,
    "allow_rebase_update": true,
    "default_delete_branch_after_merge": false,
    "default_merge_style": "merge",
    "default_allow_maintainer_edit": false,
    "avatar_url": "",
    "internal": false,
    "mirror_interval": "",
    "object_format_name": "sha1",
    "mirror_updated": "0001-01-01T00:00:00Z",
    "repo_transfer": null,
    "topics": [],
    "licenses": null
  },
  "sender": {
    "id": 43,
    "login": "test",
    "login_name": "",
    "source_id": 0,
    "full_name": "",
    "email": "test@noreply.localhost",
    "avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
    "html_url": "http://localhost:3000/test",
    "language": "",
    "is_admin": false,
    "last_login": "0001-01-01T00:00:00Z",
    "created": "2025-02-10T13:25:00+01:00",
    "restricted": false,
    "active": false,
    "prohibit_login": false,
    "location": "",
    "website": "",
    "description": "",
    "visibility": "public",
    "followers_count": 0,
    "following_count": 0,
    "starred_repos_count": 0,
    "username": "test"
  }
}
{
  "action": "waiting",
  "workflow_job": {
    "id": 344,
    "run_id": 825,
    "run_url": "http://localhost:3000/test/private-repo/actions/runs/10",
    "name": "download",
    "labels": [
      "ephemeral"
    ],
    "run_attempt": 2,
    "head_sha": "a33e70fae58cce6ddf3a3e4c33e7be4fe5ea1533",
    "head_branch": "ephemeral",
    "runner_id": 0,
    "runner_name": "",
    "steps": null,
    "created_at": "2025-02-23T14:51:50Z",
    "started_at": "1970-01-01T00:00:00Z",
    "completed_at": "1970-01-01T00:00:00Z"
  },
  "repository": {
    "id": 65,
    "owner": {
      "id": 43,
      "login": "test",
      "login_name": "",
      "source_id": 0,
      "full_name": "",
      "email": "test@test.com",
      "avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
      "html_url": "http://localhost:3000/test",
      "language": "",
      "is_admin": false,
      "last_login": "0001-01-01T00:00:00Z",
      "created": "2025-02-10T13:25:00+01:00",
      "restricted": false,
      "active": false,
      "prohibit_login": false,
      "location": "",
      "website": "",
      "description": "",
      "visibility": "public",
      "followers_count": 0,
      "following_count": 0,
      "starred_repos_count": 0,
      "username": "test"
    },
    "name": "private-repo",
    "full_name": "test/private-repo",
    "description": "",
    "empty": false,
    "private": true,
    "fork": false,
    "template": false,
    "parent": null,
    "mirror": false,
    "size": 33,
    "language": "",
    "languages_url": "http://localhost:3000/api/v1/repos/test/private-repo/languages",
    "html_url": "http://localhost:3000/test/private-repo",
    "url": "http://localhost:3000/api/v1/repos/test/private-repo",
    "link": "",
    "ssh_url": "christopher@localhost:test/private-repo.git",
    "clone_url": "http://localhost:3000/test/private-repo.git",
    "original_url": "",
    "website": "",
    "stars_count": 0,
    "forks_count": 0,
    "watchers_count": 1,
    "open_issues_count": 0,
    "open_pr_counter": 0,
    "release_counter": 0,
    "default_branch": "main",
    "archived": false,
    "created_at": "2025-02-10T20:40:44+01:00",
    "updated_at": "2025-02-23T16:38:21+01:00",
    "archived_at": "1970-01-01T01:00:00+01:00",
    "permissions": {
      "admin": true,
      "push": true,
      "pull": true
    },
    "has_issues": true,
    "internal_tracker": {
      "enable_time_tracker": true,
      "allow_only_contributors_to_track_time": true,
      "enable_issue_dependencies": true
    },
    "has_wiki": true,
    "has_pull_requests": true,
    "has_projects": true,
    "projects_mode": "all",
    "has_releases": true,
    "has_packages": true,
    "has_actions": true,
    "ignore_whitespace_conflicts": false,
    "allow_merge_commits": true,
    "allow_rebase": true,
    "allow_rebase_explicit": true,
    "allow_squash_merge": true,
    "allow_fast_forward_only_merge": true,
    "allow_rebase_update": true,
    "default_delete_branch_after_merge": false,
    "default_merge_style": "merge",
    "default_allow_maintainer_edit": false,
    "avatar_url": "",
    "internal": false,
    "mirror_interval": "",
    "object_format_name": "sha1",
    "mirror_updated": "0001-01-01T00:00:00Z",
    "repo_transfer": null,
    "topics": [],
    "licenses": null
  },
  "sender": {
    "id": 43,
    "login": "test",
    "login_name": "",
    "source_id": 0,
    "full_name": "",
    "email": "test@noreply.localhost",
    "avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
    "html_url": "http://localhost:3000/test",
    "language": "",
    "is_admin": false,
    "last_login": "0001-01-01T00:00:00Z",
    "created": "2025-02-10T13:25:00+01:00",
    "restricted": false,
    "active": false,
    "prohibit_login": false,
    "location": "",
    "website": "",
    "description": "",
    "visibility": "public",
    "followers_count": 0,
    "following_count": 0,
    "starred_repos_count": 0,
    "username": "test"
  }
}
{
  "action": "queued",
  "workflow_job": {
    "id": 343,
    "run_id": 825,
    "run_url": "http://localhost:3000/test/private-repo/actions/runs/10",
    "name": "_",
    "labels": [
      "ephemeral"
    ],
    "run_attempt": 2,
    "head_sha": "a33e70fae58cce6ddf3a3e4c33e7be4fe5ea1533",
    "head_branch": "ephemeral",
    "runner_id": 0,
    "runner_name": "",
    "steps": null,
    "created_at": "2025-02-23T14:51:50Z",
    "started_at": "1970-01-01T00:00:00Z",
    "completed_at": "1970-01-01T00:00:00Z"
  },
  "repository": {
    "id": 65,
    "owner": {
      "id": 43,
      "login": "test",
      "login_name": "",
      "source_id": 0,
      "full_name": "",
      "email": "test@test.com",
      "avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
      "html_url": "http://localhost:3000/test",
      "language": "",
      "is_admin": false,
      "last_login": "0001-01-01T00:00:00Z",
      "created": "2025-02-10T13:25:00+01:00",
      "restricted": false,
      "active": false,
      "prohibit_login": false,
      "location": "",
      "website": "",
      "description": "",
      "visibility": "public",
      "followers_count": 0,
      "following_count": 0,
      "starred_repos_count": 0,
      "username": "test"
    },
    "name": "private-repo",
    "full_name": "test/private-repo",
    "description": "",
    "empty": false,
    "private": true,
    "fork": false,
    "template": false,
    "parent": null,
    "mirror": false,
    "size": 33,
    "language": "",
    "languages_url": "http://localhost:3000/api/v1/repos/test/private-repo/languages",
    "html_url": "http://localhost:3000/test/private-repo",
    "url": "http://localhost:3000/api/v1/repos/test/private-repo",
    "link": "",
    "ssh_url": "christopher@localhost:test/private-repo.git",
    "clone_url": "http://localhost:3000/test/private-repo.git",
    "original_url": "",
    "website": "",
    "stars_count": 0,
    "forks_count": 0,
    "watchers_count": 1,
    "open_issues_count": 0,
    "open_pr_counter": 0,
    "release_counter": 0,
    "default_branch": "main",
    "archived": false,
    "created_at": "2025-02-10T20:40:44+01:00",
    "updated_at": "2025-02-23T16:38:21+01:00",
    "archived_at": "1970-01-01T01:00:00+01:00",
    "permissions": {
      "admin": true,
      "push": true,
      "pull": true
    },
    "has_issues": true,
    "internal_tracker": {
      "enable_time_tracker": true,
      "allow_only_contributors_to_track_time": true,
      "enable_issue_dependencies": true
    },
    "has_wiki": true,
    "has_pull_requests": true,
    "has_projects": true,
    "projects_mode": "all",
    "has_releases": true,
    "has_packages": true,
    "has_actions": true,
    "ignore_whitespace_conflicts": false,
    "allow_merge_commits": true,
    "allow_rebase": true,
    "allow_rebase_explicit": true,
    "allow_squash_merge": true,
    "allow_fast_forward_only_merge": true,
    "allow_rebase_update": true,
    "default_delete_branch_after_merge": false,
    "default_merge_style": "merge",
    "default_allow_maintainer_edit": false,
    "avatar_url": "",
    "internal": false,
    "mirror_interval": "",
    "object_format_name": "sha1",
    "mirror_updated": "0001-01-01T00:00:00Z",
    "repo_transfer": null,
    "topics": [],
    "licenses": null
  },
  "sender": {
    "id": 43,
    "login": "test",
    "login_name": "",
    "source_id": 0,
    "full_name": "",
    "email": "test@noreply.localhost",
    "avatar_url": "http://localhost:3000/avatars/b642b4217b34b1e8d3bd915fc65c4452",
    "html_url": "http://localhost:3000/test",
    "language": "",
    "is_admin": false,
    "last_login": "0001-01-01T00:00:00Z",
    "created": "2025-02-10T13:25:00+01:00",
    "restricted": false,
    "active": false,
    "prohibit_login": false,
    "location": "",
    "website": "",
    "description": "",
    "visibility": "public",
    "followers_count": 0,
    "following_count": 0,
    "starred_repos_count": 0,
    "username": "test"
  }
}

@lunny lunny added this to the 1.24.0 milestone Feb 24, 2025
@lunny
Copy link
Member

lunny commented Feb 24, 2025

There are some examples in repo_webhook_test.go.

* add URL field
* add HTMLURL field
* fix run_url to return api url instead of html url
@ChristopherHX
Copy link
Contributor Author

Notice for myself: Possible missing completed event for scenario: CancelPreviousJobs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
lgtm/need 2 This PR needs two approvals by maintainers to be considered for merging. modifies/api This PR adds API routes or modifies them modifies/go Pull requests that update Go code modifies/templates This PR modifies the template files modifies/translation size/L Denotes a PR that changes 100-499 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants